package threadPool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * @author: 李德才
 * @description:
 * @create: 2020-12-19 18:19
 **/
public class T02_ExecutorService {
    public static void main(String[] args) {
        /**
         * 创建一个弹性线程池
         */
        ExecutorService executorService = Executors.newCachedThreadPool();
        try {
            /**
             * submit 是可以有返回参数的
             */
            Future<Integer> future = executorService.submit(() -> {
                System.err.println("执行！");
                return 1;
            });
            /**
             * 使用 future.get() 即可获取返回值
             */
            System.err.println(future.get());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            /**
             * 最后必须调用 executorService.shutdown(); 方法，否则程序永远无法结束
             * 但是在实际项目中不需要手动调用，空闲线程会自动结束，
             * 手动调动会导致线程池完全关闭，则线程池不可用
             */
            executorService.shutdown();
        }
    }
}
